// 文件名：set_unique_sorted_export.cpp
// 目的：将含重复的原始序列去重并排序，演示 std::set 的去重有序特性与数据导出。
// 步骤：
//   1) 用原始 vector 构造 std::set -> 自动去重且按升序存储；
//   2) 将 set 内容拷贝到 vector 以获得一个“有序数组”副本；
//   3) 直接遍历 set 也可按序输出（无需再排序）。
// 复杂度：
//   - 构造 set：O(N log N)（N 为原始元素数）；
//   - 从 set 构造 vector：O(U)（U 为唯一元素数）；
//   - 遍历输出：O(U)。
// 注意：
//   - 若需要稳定去重（保留首次出现顺序），应改为使用 std::stable_sort + unique 或使用 unordered_set 记录已见元素并顺序过滤。

#include <iostream>
#include <set>
#include <vector>

int main() {
    // 原始数据：包含重复项
    std::vector<int> raw = {42, 17, 42, 3, 17, 9, 21, 3, 58};

    // 1) 利用 set 去重并排序
    std::set<int> unique(raw.begin(), raw.end());

    // 2) 导出为升序数组（如需随机访问或与需要顺序容器的 API 交互）
    std::vector<int> sorted(unique.begin(), unique.end());

    // 以数组形式输出
    std::cout << "Unique sorted values:";
    for (int value : sorted) {
        std::cout << ' ' << value;
    }
    std::cout << '\n';

    // 3) 直接从 set 遍历即可保证有序（无需额外拷贝）
    std::cout << "Streaming directly from set:";
    for (int value : unique) {
        std::cout << ' ' << value;
    }
    std::cout << '\n';

    return 0;
}